Pytorch(2)静态图与动态图机制 |
您所在的位置:网站首页 › pytorch 动态图 › Pytorch(2)静态图与动态图机制 |
[PyTorch 学习笔记] 静态图与动态图机制计算图 深度学习就是对张量进行一系列的操作,随着操作种类和数量的增多,会出现各种值得思考的问题。比如多个操作之间是否可以并行,如何协同底层的不同设备,如何避免冗余的操作,以实现最高效的计算效率,同时避免一些 bug。因此产生了计算图 (Computational Graph)。 计算图是用来描述运算的有向无环图,有两个主要元素:节点 (Node) 和边 (Edge)。节点表示数据,如向量、矩阵、张量。边表示运算,如加减乘除卷积等。 用计算图表示: 可以看作, 这里求 体现到计算图中,就是根节点 代码如下: 1234567891011import torchw = torch.tensor([1.], requires_grad=True)x = torch.tensor([2.], requires_grad=True)# y=(x+w)*(w+1)a = torch.add(w, x) # retain_grad()b = torch.add(w, 1)y = torch.mul(a, b)# y 求导y.backward()# 打印 w 的梯度,就是 y 对 w 的导数print(w.grad)结果为tensor([5.]),我们回顾前面说过的 Tensor 中有一个属性is_leaf标记是否为叶子节点。 在上面的例子中, PyTorch 采用的是动态图机制 (Dynamic Computational Graph),而 Tensorflow 采用的是静态图机制 (Static Computational Graph)。 动态图是运算和搭建同时进行,也就是可以先计算前面的节点的值,再根据这些值搭建后面的计算图。优点是灵活,易调节,易调试。PyTorch 里的很多写法跟其他 Python 库的代码的使用方法是完全一致的,没有任何额外的学习成本。 静态图是先搭建图,然后再输入数据进行运算。优点是高效,因为静态计算是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。但是不灵活。TensorFlow 每次运行的时候图都是一样的,是不能够改变的,所以不能直接使用 Python 的 while 循环语句,需要使用辅助函数 tf.while_loop 写成 TensorFlow 内部的形式。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |